package com.wongoing.sys.shiro;

import java.security.Key;

import org.apache.shiro.codec.Hex;
import org.apache.shiro.crypto.AesCipherService;
import org.apache.shiro.crypto.hash.SimpleHash;

/**
 * 功能说明：Shiro框架辅助类
 * 修改说明：
 * @author zhenglibing
 * @date 2017年10月27日 上午10:59:58
 * @version 0.1
 */
public class ShiroHelper {
	/**
	 * 默认的盐值2
	 */
	public static final String SALT2 = "WONGOING";
	/**
	 * 默认加密次数
	 */
	public static final int HASHITERATIONS = 1024;
	/**
	 * MD5加密算法
	 */
	public static final String ALGORITHM_MD5 = "MD5";
	/**
	 * SHA-1加密算法
	 */
	public static final String ALGORITHM_SHA1 = "SHA-1";
	/**
	 * SHA-256加密算法
	 */
	public static final String ALGORITHM_SHA1256 = "SHA-256";
	/**
	 * SHA-512加密算法
	 */
	public static final String ALGORITHM_SHA512 = "SHA-512";
	
	/**
	 * 功能说明：加密算法实现
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月27日 上午11:03:19
	 * @param source 要加密的原文，通常传入密码明文
	 * @param algorithmName 要使用的加密算法，如MD5、SHA-1、SHA-256、SHA-512
	 * @param salt1 盐值1
	 * @param salt2 盐值2
	 * @param hashIterations 要加密的次数
	 * @return 返回加密后的密文
	 */
	public static String encrypt(String source, String algorithmName, String salt1, String salt2, int hashIterations) {
		if (null == source) source = "";
		if (null == algorithmName) algorithmName = "MD5";
		if (null == salt1) salt1 = "";
		if (null == salt2) salt2 = "";
		SimpleHash hash = new SimpleHash(algorithmName, source, salt1 + salt2, hashIterations);  
		String encode = hash.toHex();
		return encode;
	}
	/**
	 * 功能说明：MD5加密实现
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月27日 上午11:07:08
	 * @param source 要加密的原文，通常传入密码明文
	 * @param salt1 盐值1
	 * @param salt2 盐值2
	 * @param hashIterations 要加密的次数
	 * @return 返回加密后的密文
	 */
	public static String md5Encrypt(String source, String salt1, String salt2, int hashIterations) {
		if (null == source) source = "";
		if (null == salt1) salt1 = "";
		if (null == salt2) salt2 = "";
		SimpleHash hash = new SimpleHash("MD5", source, salt1 + salt2, hashIterations);  
		String encode = hash.toHex();
		return encode;
	}
	
	/**
	 * 功能说明：SHA1加密实现
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月27日 上午11:08:51
	 * @param source 要加密的原文，通常输入密码明文
	 * @param salt1 盐值1
	 * @param salt2 盐值2
	 * @param hashIterations 要加密的次数
	 * @return 返回加密后的密文
	 */
	public static String sha1Encrypt(String source, String salt1, String salt2, int hashIterations) {
		if (null == source) source = "";
		if (null == salt1) salt1 = "";
		if (null == salt2) salt2 = "";
		SimpleHash hash = new SimpleHash("SHA-1", source, salt1 + salt2, hashIterations);  
		String encode = hash.toHex();
		return encode;
	}

}
